package cn.kgc.util;

import cn.kgc.entity.Menus;
import cn.kgc.entity.Users;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;

import java.util.List;
import java.util.stream.Collectors;

public class SystemUtil {
    public static Users getLoginUser() {
        SecurityContext context = SecurityContextHolder.getContext();
        return (Users) context.getAuthentication().getPrincipal();
    }


    /**
     * 将菜单列表转为树形结构
     *
     * @param menus
     * @return
     */
    public static List<Menus> tree(List<Menus> menus) {
//        //1找到菜单的根节点(parent_id为-1的菜单)

//        List<Menus> menusList = new ArrayList<>();
//        //遍历所有节点
//        menus.forEach(menu -> {
//            //如果节点的parent_id为-1 当前节点根节点
//            if (menu.getParentId() == -1) {
//                menusList.add(menu);
//            }
//        });

        //filter方法过滤：满足条件的数据会被保留下来
        //如果菜单的parentId为-1则菜单保留
        return menus.stream().filter(menu -> menu.getParentId() == -1).peek(parentMenu -> {
            //parentMenu 遍历的所有的根节点(根节点)
            //2 找到根节点下的子节点
            findChildren(parentMenu, menus);
        }).collect(Collectors.toList());
    }

    /**
     * 从menus集合中找到menu节点中的子节点 将其放入到menu节点的children节点集合中
     *
     * @param menu  父节点
     * @param menus 所有节点
     */
    private static void findChildren(Menus menu, List<Menus> menus) {
        menus.forEach(temp -> {
            if (menu.getId() == temp.getParentId()) {
                menu.getChildren().add(temp);
                findChildren(temp, menus);
            }
        });
    }
}
